<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>
    <div class="content__2ebE">
        <div html="<p>给定一个二叉树和一个目标和，判断该树中是否存在根节点到叶子节点的路径，这条路径上所有节点值相加等于目标和。</p>
        <p><strong>说明:</strong>&amp;nbsp;叶子节点是指没有子节点的节点。</p>
        <p><strong>示例:</strong>&amp;nbsp;<br>
        给定如下二叉树，以及目标和 <code>sum = 22</code>，</p>
        
        <pre>              <strong>5</strong>
                     / \
                    <strong>4 </strong>  8
                   /   / \
                  <strong>11 </strong> 13  4
                 /  \      \
                7    <strong>2</strong>      1
        </pre>
        <p>返回 <code>true</code>, 因为存在目标和为 22 的根节点到叶子节点的路径 <code>5-&amp;gt;4-&amp;gt;11-&amp;gt;2</code>。</p>
        " class="notranslate">
            <p>给定一个二叉树和一个目标和，判断该树中是否存在根节点到叶子节点的路径，这条路径上所有节点值相加等于目标和。</p>
            <p><strong>说明:</strong>&nbsp;叶子节点是指没有子节点的节点。</p>
            <p><strong>示例:</strong>&nbsp;<br>
                给定如下二叉树，以及目标和 <code>sum = 22</code>，</p>
            <pre>                      <strong>5</strong>
                     / \
                    <strong>4 </strong>  8
                   /   / \
                  <strong>11 </strong> 13  4
                 /  \      \
                7    <strong>2</strong>      1
        </pre>
            <p>返回 <code>true</code>, 因为存在目标和为 22 的根节点到叶子节点的路径 <code>5-&gt;4-&gt;11-&gt;2</code>。</p>
        </div>
    </div>
    <script>
        /**
         * Definition for a binary tree node.
         * function TreeNode(val) {
         *     this.val = val;
         *     this.left = this.right = null;
         * }
         */
        /**
         * @param {TreeNode} root
         * @param {number} sum
         * @return {boolean}
         */

        //  思想：利用递归的方式遍历所有节点，遍历一个节点用sum 减去这个节点值，到最后sum==0 且没有节点可以遍历为止
        var hasPathSum = function (root, sum) {
            if (root === null) return false;
            sum = sum - root.val
            if (root.right === null && root.left === null) {
                return (sum === 0)
            }

            return hasPathSum(root.left, sum) || hasPathSum(root.right, sum);   //只要有一个true 返回true
        };
    </script>
</body>

</html>